import java.util.*;

/**
 * Map 作业 - 统计字母出现次数
 */
public class MapAssignment {

    /**
     * 方法1：统计每个字母出现的次数（不排序）
     * @param input 输入的字符串
     */
    public static void countLettersUnsorted(String input) {
        // 使用 HashMap 存储字母和出现次数
        Map<Character, Integer> letterCount = new HashMap<>();

        // 遍历字符串中的每个字符
        for (char c : input.toCharArray()) {
            // 只统计字母（大小写都包括）
            if (Character.isLetter(c)) {
                // 转换为小写进行统一处理
                char lowerCaseChar = Character.toLowerCase(c);

                // 如果 map 中已存在该字母，则次数加1；否则初始化为1
                letterCount.put(lowerCaseChar, letterCount.getOrDefault(lowerCaseChar, 0) + 1);
            }
        }

        // 输出结果
        System.out.println("=== 不排序的统计结果 ===");
        for (Map.Entry<Character, Integer> entry : letterCount.entrySet()) {
            System.out.println("字母 '" + entry.getKey() + "' 出现了 " + entry.getValue() + " 次");
        }
    }

    /**
     * 方法2：统计每个字母出现的次数，并按照 key 字母进行排序
     * @param input 输入的字符串
     */
    public static void countLettersSorted(String input) {
        // 使用 TreeMap 自动按 key 排序
        Map<Character, Integer> letterCount = new TreeMap<>();

        // 遍历字符串中的每个字符
        for (char c : input.toCharArray()) {
            // 只统计字母（大小写都包括）
            if (Character.isLetter(c)) {
                // 转换为小写进行统一处理
                char lowerCaseChar = Character.toLowerCase(c);

                // 如果 map 中已存在该字母，则次数加1；否则初始化为1
                letterCount.put(lowerCaseChar, letterCount.getOrDefault(lowerCaseChar, 0) + 1);
            }
        }

        // 输出结果（自动按字母顺序排列）
        System.out.println("=== 按字母排序的统计结果 ===");
        for (Map.Entry<Character, Integer> entry : letterCount.entrySet()) {
            System.out.println("字母 '" + entry.getKey() + "' 出现了 " + entry.getValue() + " 次");
        }
    }

    /**
     * 主方法 - 测试程序
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一组字符串:");
        String input = scanner.nextLine();

        // 执行第一个任务：不排序统计
        countLettersUnsorted(input);

        System.out.println();

        // 执行第二个任务：排序统计
        countLettersSorted(input);

        scanner.close();
    }
}
